package cn.kattomy.shop.cart.vo;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

public class Cart {

	//购物车的属性
	//购物项的 Map 集合
	private Map<Integer, CartItem> map = new LinkedHashMap<Integer, CartItem>();
	//购物总计
	private double total;
	
	public Collection<CartItem> getCartItems() {
		return map.values();
	}
	
	public double getTotal() {
		return total;
	}
	
	//减少购物车项中一个商品的数量的方法
	public void addOrSubCart(CartItem cartItem) {
		CartItem existCartItem = map.get(cartItem.getProduct().getPid());//获取购物车中已经存在的购物项
		
		//先修改总计的值
		total -= existCartItem.getSubtotal();
		
		//更改购物车中的购物项对象
		map.put(cartItem.getProduct().getPid(), cartItem);
		
		//最后设置总计的值
		total += cartItem.getSubtotal();
	}
	
	//购物车的功能：
	//1.添加购物项到购物车
	public void addCart(CartItem cartItem) {
		//判断购物车中是否已经存在该购物项：
		/*
		 *	*如果存在：
		 * 		*数量增加
		 * 		*总计 = 总计 + 购物项小计
		 *	*如果不存在：
		 *		*向 Map 中添加购物项
		 *		*总计 = 总计 + 购物项小计
		 */
		Integer pid = cartItem.getProduct().getPid();
		//判断购物车中是否已经存在该购物项
		if (map.containsKey(pid)) {
			//存在
			CartItem existCartItem = map.get(pid);//获取购物车中已经存在的购物项
			existCartItem.setCount(existCartItem.getCount() + cartItem.getCount());
		}else {
			//不存在
			map.put(pid, cartItem);
		}
		//设置总计的值
		total += cartItem.getSubtotal();
	}
	
	//2.移除购物车中的购物项
	public void removeCart(Integer pid) {
		//移除购物项
		CartItem cartItem =  map.remove(pid);
		//总计 = 总计 - 移除购物项的小计
		total -= cartItem.getSubtotal();
	}
	
	//3.清空购物车
	public void clearCart() {
		//清空购物项
		map.clear();
		
		//总计设置为 0 
		total = 0;
	}
	
	
}
